package com.hngm.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * 数据库连接管理类
 * 创建数据库连接，执行SQL操作的工具类
 * @author 张磊
 *
 */

public class DBManager {
	//定义数据库连接属性  static修饰的变量一般都是大写
	//驱动的地址
	private final static String DRIVER = "com.mysql.jdbc.Driver";
	//数据库连接字符串
	private final static String URL = "jdbc:mysql://localhost:3306/finalprojectdb";
	//用户名
	private final static String USER = "root";
	//密码
	private final static String PWD = "123456";
	
	//获取数据库连接的方法
	public static Connection getConnection(){
		try {
			//1、加载驱动
			Class.forName(DRIVER);
			//2、获取数据库连接
			Connection conn = DriverManager.getConnection(URL,USER,PWD);
			//返回数据库连接
			return conn;
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			System.out.println("驱动加载异常！");
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println("数据库异常！");
		}
		return null;
	}
	
	//定义一个执行增，删，改SQL语句的方法
	public static int executeUpdate(String sql){
		Connection conn = null;//数据库连接的变量
		Statement st = null;//发送SQL语句的对象
		try {
			//获取数据库连接
			conn = getConnection();
			
			//创建statement
			st = conn.createStatement();
			
			//使用st发送要执行的SQL语句
			int result = st.executeUpdate(sql);
			
			return result;
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally{//最终的，在任何情况下，都会执行finally中的语句
			//在finally关闭链接，释放资源是在任何情况下都能够执行
			closedAll(conn, st, null);
		}
		return 0;
	}
	
	//定义执行查询SQL语句的方法
	public static QueryDataResult executeQuery(String sql){
		Connection conn = null;
		Statement st = null;
		ResultSet rs = null;
		try {
			conn = getConnection();
			st = conn.createStatement();
			rs = st.executeQuery(sql);
			return new QueryDataResult(conn, st, rs);
		} catch (SQLException e) {
			e.printStackTrace();
			closedAll(conn, st, rs);
		}
		return null;
	}
	
	
	//关闭数据库连接，释放系统资源的方法
	public static void closedAll(Connection conn , Statement st , ResultSet rs){
		try {
			if(rs != null){
				rs.close();
			}
			
			if(st != null){
				st.close();
			}
			
			if(conn != null){
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
			
	
}
